package com.atguigu.partition;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/*
    在该类中去实现MapTask中实现的业务逻辑代码
     Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> :
        两组：
            KEYIN：读取数据的偏移量的类型
            VALUEIN：读取的一行一行的数据的类型

             KEYOUT：写出的key的类型（在这是单词）
             VALUEOUT：写出的value的类型（在这是单词的数量）

 */
public class WCMapper extends Mapper<LongWritable, Text,Text,LongWritable> {
    //封装key
    private Text outKey = new Text();
    //封装value
    private LongWritable outValue = new LongWritable();
    /**
     * map方法用来实现MapTask中需要实现的业务逻辑代码
     * map方法在被循环调用，每调用一次传入一行数据
     * @param key 读取数据时的偏移量
     * @param value 一行一行的数据
     * @param context 上下文（在这是用来将key,value写出去）
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //super.map(key, value, context); 不能写
        //1.将Text转成String(可以使用StringAPI)
        String line = value.toString();
        //2.切割数据
        String[] words = line.split(" ");
        //3.封装K,V
        for (String word : words) {
            //设置key值
            outKey.set(word);
            //设置value值
            outValue.set(1);
            //4.将key,value写出去
            context.write(outKey,outValue);
        }

    }
}
